package remote{
	
	import entidades.SolicitacaoCotacao;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.rpc.AsyncToken;
	import mx.rpc.Responder;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.remoting.mxml.RemoteObject;
	
	public class SolicitacaoRemote {
		
		//Busca Cotacao para verificar se pode criar
		public function buscarCotacao( result:Function, sol:SolicitacaoCotacao):void{
			var async:AsyncToken = _remote.buscarCotacao(sol);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function buscarCotacoesSolic( result:Function):void{
			var async:AsyncToken = _remote.buscarCotacoesSolic();
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		
//		Verifica se tem fornecedor para todos os produtos
		public function verificaProdForn( result:Function, itens:ArrayCollection, forns:ArrayCollection):void{
			var async:AsyncToken = _remote.verificaProdForn(itens, forns);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function sugerirForn( result:Function, itens:ArrayCollection ):void{
			var async:AsyncToken = _remote.sugerirForn(itens);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function recuperarReq( result:Function ):void{
			var async:AsyncToken = _remote.recuperarReq();
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}		
		
		public function recuperarSol( result:Function, tipo:String ):void{
			var async:AsyncToken = _remote.getSolicitacao(tipo);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function editarSol( result:Function, sol:SolicitacaoCotacao ):void{
			var async:AsyncToken = _remote.editarSolicitacao(sol);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function aprovarAnalise( result:Function, solic:SolicitacaoCotacao ):void{
			var async:AsyncToken = _remote.aprovarPedido(solic);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		} 
		
		public function visualizarAnaliseSol( result:Function, sol:SolicitacaoCotacao ):void{
			var async:AsyncToken = _remote.visualizarAnaliseSolicitacao(sol);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function exibirSolicitacaoCotacao( result:Function, solic:SolicitacaoCotacao ):void{
			var async:AsyncToken = _remote.exibirSolicitacao(solic);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		} 
		
		public function gravarSolicitacaoCotacao( result:Function, sc:SolicitacaoCotacao, fornecedores:ArrayCollection, status:Number ):void{
			var async:AsyncToken = _remote.salvarSolicitacao(sc, fornecedores, status);
			async.addResponder( new Responder( result, defaultFaultHandler ) );			
		}
		
		public function editarSolicitacaoCotacao( result:Function, sc:SolicitacaoCotacao, fornecedores:ArrayCollection, status:Number ):void{
			var async:AsyncToken = _remote.editarSolicitacao(sc, fornecedores, status);
			async.addResponder( new Responder( result, defaultFaultHandler ) );			
		}
		
		
		public function buscarSolicitacao(result:Function, numSolicitacao:Number, numRequisicao:Number, fornecedor:Number,
										 idStatus:Number, dtFimDe:Date, dtFimAte:Date):void{		
			var result:Function;
			var async:AsyncToken = _remote.buscarSolicitacao(numSolicitacao, numRequisicao, fornecedor,
				idStatus, dtFimDe, dtFimAte);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		//--------------------setup----------------------------//
		private var _remote:RemoteObject;
		
		public function SolicitacaoRemote(){
			_remote = new RemoteObject();
			_remote.showBusyCursor = true;
			_remote.destination = 'SolicitacaoService';
		}
		
		private function defaultFaultHandler(e:FaultEvent):void{
//			Alert.show( e.fault.faultString );
			Alert.show("Estamos com problemas no servidor! Tente novamente mais tarde!","Solicitação Cotação");
		}
		
		private static var _instance:SolicitacaoRemote;
		public static function getInstance():SolicitacaoRemote{
			if(_instance == null){
				_instance = new SolicitacaoRemote();
			}
			return _instance;
		}
	}
}